package com.kj.tms.system.service.org.dao;

import com.kj.tms.common.bean.dao.BaseMapper;
import com.kj.tms.common.bean.dto.TreeData;
import com.kj.tms.pri.system.org.dto.OrgDto;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;

/**
 * @ProjectName:
 * @Package: com.kj.tms.system.service.org.dao
 * @ClassName: OrgServiceImpl
 * @Description: 组织机构dao类
 * @Author: 董世栋
 * @CreateDate:
 * @UpdateUser:
 * @UpdateDate:
 * @UpdateRemark:
 * @Version: 1.0
 * Copyright: 北京宏图天安 Copyright (c) 2017
 */
@Repository
public interface OrgMapper extends BaseMapper<OrgDto> {

    /**
     * @param object
     * @return List<OrgDto>
     * @throws
     * @method queryOrgByUser
     * @description 通过用户查询组织
     * @author 董世栋
     * @version 1.0
     * @date
     */
    List<OrgDto> queryOrgByUser(Object object);

    /**
     * @param dto
     * @return List<OrgDto>
     * @throws
     * @method getOrgByID
     * @description 根据主键查询
     * @author 董世栋
     * @version 1.0
     * @date
     */
    OrgDto getOrgByID(OrgDto dto);

    /**
     * @param record
     * @return int
     * @throws
     * @method insertDto
     * @description 添加数据
     * @author 董世栋
     * @version 1.0
     * @date
     */
    int insertDto(OrgDto record);

    /**
     * @param record
     * @return int
     * @throws
     * @method updateBySelective
     * @description 更新数据
     * @author 董世栋
     * @version 1.0
     * @date
     */
    int updateBySelective(OrgDto record);

    /**
     * @param model
     * @return List<OrgDto>
     * @throws
     * @method queryByPage
     * @description 条件查询
     * @author 董世栋
     * @version 1.0
     * @date
     */
    List<OrgDto> queryByPage(OrgDto model);

    /**
     * @param model
     * @return List<TreeData>
     * @throws
     * @method queryByList
     * @description 根据dto条件查全部, 包含查下级所有机构
     * @author 董世栋
     * @version 1.0
     * @date
     */
    List<TreeData> queryByList(OrgDto model);
    /**
     * @param model
     * @return List<TreeData>
     * @throws
     * @method queryByList
     * @description 根据dto条件查直接孩子 只包含查直接下级
     * @author 黄冬冬
     * @version 1.0
     * @date
     */
    List<TreeData> queryDirectChildrenByList(OrgDto model);

    /**
     * @param model
     * @return List<TreeData>
     * @throws
     * @method getTreeDataByOrgName
     * @description 获取根据条件查询机构树（只针对名称模糊查询）
     * @author 黄冬冬
     * @version 1.0
     * @date
     */
    List<TreeData> getTreeDataByOrgName(OrgDto model);
    /**
     * @param map
     * @Title:  queryByUserCodeList
     * @Description 根据用户编码和当前登录机构查询机构树
     * @Method  queryByUserCodeList
     * @Return  List<TreeData>
     * @Date: 2017年11月30日 11:16
     * @Author:wangguoqing
     * @version: 2017年11月30日 11:16
     */
    List<TreeData> queryByUserCodeList(Map map);

    /**
     * @param model
     * @return List<OrgDto>
     * @throws
     * @method queryByList
     * @description 根据dto条件查全部 pid ，name
     * @author 董世栋
     * @version 1.0
     * @date
     */
    List<OrgDto> listByOrg(OrgDto model);

    /**
     * @param model
     * @return List<OrgDto>
     * @throws
     * @method listByOrgAll
     * @description 查询组织机构包括没有删除的
     * @author 董世栋
     * @version 1.0
     * @date
     */
    List<OrgDto> listByOrgAll(OrgDto model);

    /**
     * @method      [queryOrgByList]
     * @description [模糊匹配查询机构数据到列表]
     * @author      王国庆
     * @version     1.0
     * @param
     * @return
     * @exception
     * @date        2017年12月28日 14:22
     */
    List<OrgDto>  queryOrgByList(OrgDto orgDto);

    /**
     * @param orgCode
     * @return OrgDto
     * @throws
     * @method getOrgByOrgCode
     * @description 根据OrgCode获取组织信息
     * @author 董世栋
     * @version 1.0
     * @date
     */
    OrgDto getOrgByOrgCode(@Param(value = "orgCode") String orgCode);

    /**
     * @param orgDto
     * @return List<OrgDto>
     * @throws
     * @method queryOrgByConditions
     * @description 根据dto条件查全部
     * @author 董世栋
     * @version 1.0
     * @date
     */
    OrgDto getByConditions(OrgDto orgDto);

    /**
     * @param record
     * @return int
     * @throws
     * @method delOrg
     * @description 逻辑删除
     * @author 董世栋
     * @version 1.0
     * @date
     */
    int deleteOrg(OrgDto record);

    /**
     * @param map
     * @return List<OrgDto>
     * @throws
     * @method listByCondition
     * @description 分页查询纳税主体
     * @author 董世栋
     * @version 1.0
     * @date
     */
    List<OrgDto> listByCondition(Map map);

    /**
     * @param map
     * @return int
     * @throws
     * @method getCounts
     * @description 分页查询counts
     * @author 董世栋
     * @version 1.0
     * @date
     */
    int getCounts(Map map);
    /**
    * @method      [listByOrgCodes]
    * @description [通过orgCode查询本机构以及下级机构]
    * @author      [yangruidong]
    * @version     1.0
    * @param       
    * @return      
    * @exception   
    * @date         
    */
    List<OrgDto> listByOrgCodes(@Param(value = "orgCode") String orgCode);
    /**
    * @method      [listByOrgCode]
    * @description [通过orgCode查询本机构以及下级机构的纳税主体]
    * @author      [yangruidong]
    * @version     1.0
    * @param       
    * @return      
    * @exception   
    * @date         
    */
    List<OrgDto> listByOrgCode(@Param(value = "orgCode") String orgCode, @Param(value = "taxCode") String taxCode, @Param(value = "period") String period);

    /**
     * @param
     * @return
     * @throws
     * @method [listByTaxPayerCodes]
     * @description [通过纳税主体code查询树状结构]
     * @author [yangruidong]
     * @version 1.0
     * @date
     */
    List<OrgDto> listByTaxPayerCodes(List Codes);

    /**
     * @param orgCode
     * @return orgName
     * @throws
     * @method getOrgNameByOrgCode
     * @description 根据OrgCode获取组织信息
     * @author 董世栋
     * @version 1.0
     * @date
     */
    String getOrgNameByOrgCode(@Param(value = "orgCode") String orgCode);
    /**
    * @method      [listByTaxPayer]
    * @description [通过纳税主体查询数据来源]
    * @author      [yangruidong]
    * @version     1.0
    * @param
    * @return
    * @exception
    * @date
    */
    List<OrgDto> listByTaxPayer(String[] Codes);

}

